<?php
/**
 * Controller_Base
 *
 * Класс Controller_Base отвечает за базовую работу всех контроллеров
 *
 * @author Дмитрий Кузьма <kouzma.d@gmail.com>
 * @version 1.0
 */
abstract class Controller_Base {

	// Стандартные атрибуты. Используются во все проектах
  protected $showAnalytics = true; // Флаг, выводить или нет код гугл-аналитикс
  protected $isPrint = false; // Флаг, является ли данная страница страницей для печати
  protected $title = ''; // Мета-тайтл страницы
	protected $pageHead = ''; // Главный заголовок страницы
	protected $bodyAttrs = ''; // атрибуты тега body
	protected $keywords = null; // мета-ключевые слова
	protected $description = null; // мета-описание
	protected $pageDescription = null; // Описание страницы - стандартно выводится под заголовком страницы
	protected $pageSeo = null; // Описание страницы для СЕО
	protected $arrCss = array(
	);
	
	protected $arrJs = array(
	); // список подключаемых js-файлов
	
	protected $arrRequest = array(); // Массив, содержащий информацию о запросе к странице (элементы массива  - то что между слешами в URL)
	protected $jsReady; // JS-код, который будет автоматически вызван при загрузке страницы
	protected $arrAdditional = array(); // в этом массив можно вносить строки любых мета-тегов. Он будет выведен внутри элемента haed
	protected $showUserMessagesInStandardPlace = false; // Флаг, определяющий выводить ли системные сообщения о выполнении действий пользователю в стандартном месте
	protected $arrUserVars = array(); // Хранилище для пользовательских переменных. Например, для флагов свернуто/развернуто
  protected $showLeftColumn = false; // Флаг, указывающий, нужно ли выводить левую колонку
  protected $showRightColumn = false; // Флаг, указывающий, нужно ли выводить левую колонку
  // Атрибуты, связанные с постраничным выводом
  protected $pageLimit = 20;            // Кол-во элементов на страницу
  protected $editLimit = 10;						// Кол-во элементов при редаактировании
  protected $id = 0;										// Текущий элемент
  protected $pageNum = 1;               // Текущая страница
  protected $elementsInListAmount = 0;  // Количество элементов в списке для постраничного вывода
  protected $pageUrlsInGet = true;      // Номер страницы передавать в GET
  protected $isPageInUrl = false;       // Номер страницы уже фигурирует в URL. Требуется только тогда, когда $pageUrlsInGet == false
  protected $editUrl = null;            // Ссылка на редактирование. Если ее задать в заголовке автоматически появится "ред."
  protected $addUrl = null;            // Ссылка на добавление. Если ее задать в заголовке автоматически появится "Добавить"
  protected $mainActionHtml = null;     // HTML код основной ссылки - будут вставляться в div с float right в основном заголовке
  public 		$error = 0;
  protected $showLeftMenu = true; // выводить левое меню или нет
  protected $showCrumbsInStandardPlace = true; // Флаг, определяющий, выводить ли хлебные крошки в стандартном месте
  protected $ifLastCrumbIsLink = false; // Флаг, определяющий, выводить ли хлебные крошки в стандартном месте
  protected $arrCrumbs = array();
  protected $language = 'rus';
	public 		$data = array(); // Массив с данными которые могу использовать любые методы контроллера
	public 		$showPrebasement = false; 
	protected $canonical = null; // Канонический адрес страницы
	protected $callBackFunction;
	protected $beforeAll;
  
	/**
	 * Конструктор контроллера
	 *
	 * @param array $arrRequest - массив, содержащий информацию о запросе к странице (элементы массива  - то что между слешами в URL)
	 */
	public function __construct(&$arrRequest) {
	  Service_Debug::setDebug();
		$this->arrRequest = &$arrRequest;
		$this->pageNum = isset($_GET['p']) ? abs(intval($_GET['p'])) : 1; //номер страницы в листалке
		//$this->addJsToBegin('lang/' . Service_Translate::getLang() . '.js?v=6');
		if (DEBUG) {
			$this->addJsReady("
				$(document).keyboard(
					'd+b+g',
					{strict : false},
					function () {
						if ($('#debug:visible').length) $('#debug').hide();
						else {
							$('#debug').show();
							$('.debugHidden').hide();
						}
					}
				);
				$(document).keyboard(
					'j+d+b',
					{strict : false}, jDebug
				);
			");
		}
	}

	protected function compressCssJs() {
		$cssJsConfig = array(
			'css' => array(),
			'js' => array()	
		);
		
		require 'css_js.php';
		
		$merger = new \HTTP_StaticMerger(SECURITY_KEY);

		//scripts
		foreach ($cssJsConfig['js'] as &$js) {
			if(!preg_match('#^((\w+:)?//)#s', $js)) $js = W_JS . $js;
		}
		echo "\n" . $merger->getHtml("/static.php/", $cssJsConfig['js'], NO_JS_CSS_MERGE) . "\n";
		
		//css
		foreach ($cssJsConfig['css'] as &$css) {
			if(!preg_match('#^((\w+:)?//)#s', $css)) $css = W_CSS . $css;
		}
		echo "\n" . $merger->getHtml("/static.php/", $cssJsConfig['css'], NO_JS_CSS_MERGE) . "\n";
		
	}

	/**
	 * Выбираем действие в зависимости от URL в $this->arrRequest (Переопределяется в наследуемых классах)
	 *
	 */
	public function action() {
		$this->setError(404);
	}



	/**
	 * Метод выводит метаданные
	 *
	 */
	public function showMetas() {
	  Service_Debug::setDebug();
		?><?php if(!isset($_SERVER['HTTP_USER_AGENT']) || strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') === FALSE) echo '<!DOCTYPE html>' ?>
<html lang="ru">
<head>
<title><?php echo $this->title;?></title>

<meta charset="utf-8" />
<meta name="author" content="Kouzma" />
<meta name='yandex-verification' content='451e220d00430b07' />
<link rel="shortcut icon" href="<?php echo W_IMAGES;?>favicon.ico"
	type="image/x-icon" />
	  	<?php 
  	
	  	if (isset($this->keywords))	echo '<meta name="keywords" content="' . $this->keywords . '" />';
	  	if (isset($this->description)) echo '<meta name="description" content="' . $this->description . '" />';
	  	if ($this->canonical) echo '<link rel="canonical" href="' . $this->canonical . '" />';

	  	foreach ($this->arrAdditional as $additional) echo $additional;
	  	$this->compressCssJs();

	  	foreach ($this->arrCss as $cssFile)	echo '<link rel="stylesheet" type="text/css" href="' . W_CSS . $cssFile . '" />';
	  	foreach ($this->arrJs as $jsFile) echo '<script type="text/javascript" src="' . W_JS . $jsFile . '"></script>';
	  	    
		
		
		if (isset($this->jsReady)) {
			echo '<script type="text/javascript">';
				echo '$().ready(function() {';
					echo $this->jsReady;
				echo '});';
			echo '</script>';
		}
		?>
		</head>
<body <?php echo $this->bodyAttrs;?>>

<?php if (!empty($this->beforeAll)) echo $this->beforeAll;?>
	<div id="all">
		<div id="allIn">
		<?php
		 
	}


	
  /**
   * Метод добавляет css файл к общему массиву
   *
   * @param string $cssFileName
   */
	public function addCss($cssFileName) {
  	$this->arrCss[] = $cssFileName;
  }
  /**
   * Метод добавляет js файл к общему массиву
   *
   * @param string $jsFileName
   */
	public function addJs($jsFileName) {
  	$this->arrJs[] = $jsFileName;
  }

  /**
   * Метод добавляет js файл в начало общего массива
   *
   * @param string $jsFileName
   */
	public function addJsToBegin($jsFileName) {
  	$this->arrJs = array_merge(array($jsFileName), $this->arrJs);
  }
  /**
   * Метод добавляет очередную хлебную крошки к общему массиву
   *
   * @param string $arrCrumb
   */
	public function addCrumb($name, $url = null, $noLinkIfLast = false) {
  	$arrCrumb = array();
  	$arrCrumb['name'] = $name;
  	$arrCrumb['url'] = $url;
  	$arrCrumb['no_link_if_last'] = $noLinkIfLast;
	  $this->arrCrumbs[] = $arrCrumb;
  }
  /**
   * Метод устанавливает хлебные крошки
   *
   * @param string $arrCrumbs
   */
	public function setCrumbs($arrCrumbs) {
  	$this->arrCrumbs = $arrCrumbs;
  }
  /**
   * Метод добавляет доплнительный код в метатеги
   *
   * @param string $additional
   */
	public function addAdditional($additional) {
  	$this->arrAdditional[] = $additional;
  }
  /**
   * Метод задает js код, который будет выполняться при загрузке страницы
   *
   * @param string $jsReadyText
   */
	public function setJsReady($jsReadyText) {
  	$this->jsReady = $jsReadyText;
  }

  /**
   * Метод добавляет js код, который будет выполняться при загрузке страницы
   *
   * @param string $jsReadyText
   */
  public function addJsReady($jsReadyText) {
    if (!isset($this->jsReady)) $this->jsReady = $jsReadyText;
    else $this->jsReady .= $jsReadyText;
  }

  /**
   * Метод закрывает html-код
   *
   */
	public function showClose() {
	  Service_Debug::setDebug();
	  if ($this->showAnalytics  && SHOW_ANALYTICS) {
			$this->showAnalytics();
    }
    if (DEBUG) {
    	$objDebug = Service_Debug::instance();
			$objDebug->echoDebug();
    }
    echo '</body>';
		echo '</html>';
	}


	/**
	 * Выводит шапку
	 *
	 */
	public function showHeader() {
	  Service_Debug::setDebug();
	  if (!$this->showUserMessagesInStandardPlace) {
	  	if (User_Flash::_get('successMessage')) $messageClass = 'successMessage';
	  	if (User_Flash::_get('errorMessage')) $messageClass = 'errorMessage';
	  	if (!empty($messageClass)) {
	 			$this->addJsReady("
		  		$('#" . $messageClass . "').dialog({
						width: 600,
						height: 450,
						position: 'center',
						modal: true
					});");
	  	}
					
	  }
	  
  	$this->showMetas();    // вывод метатегов
		$this->showTop();      // вывод верхней части

		echo '<div id="box">';
		
		// Вывод хлебных крошек
		if ($this->showCrumbsInStandardPlace) {
			$this->showCrumbs();
		}
		
		
		
		if (!empty($this->callBackFunction)) call_user_func(array($this, $this->callBackFunction));
		
		// Вывод боковых столбцов и
		if ($this->showLeftColumn) $this->showLeft();
		if ($this->showRightColumn) $this->showRight();
		
		
		
		// Вывод основного дива в зависимости от наличия боковых столбцов
		if ($this->showLeftColumn && $this->showRightColumn) echo '<div id="main">';
		elseif (!$this->showLeftColumn && $this->showRightColumn) echo '<div id="mainWithLeft">';
		elseif ($this->showLeftColumn && !$this->showRightColumn) echo '<div id="mainWithRight">';
		else echo '<div id="mainFullWidth">';
		
		// вывод основного заголовка
		if ($this->pageHead != '') {
			$this->showH1($this->pageHead);
		}

		// вывод сообщения об ошибке
		if ($this->showUserMessagesInStandardPlace) {
			if (User_Flash::_get('successMessage')) View_User::showUserMessage(User_Flash::_get('successMessage'), 1);
			if (User_Flash::_get('errorMessage')) View_User::showUserMessage(User_Flash::_get('errorMessage'), -1);
		}
		else {			
			if (User_Flash::_get('successMessage')) {
				echo '<div id="successMessage" style="display:none;">' . User_Flash::_get('successMessage') . '</div>';
			}
			if (User_Flash::_get('errorMessage')) {
				echo '<div id="errorMessage" style="display:none;">' . User_Flash::_get('errorMessage') . '</div>';
			}							
		}
		if(!empty($this->pageSeo)) echo '<div class="text-description">' . $this->pageSeo . '</div>';

  }

  /**
   * Метод выводит стандартный заголовок
   *
   * @param string $pageHead
   * @param string $editUrl
   */
  public function showH1($pageHead = null, $editUrl = null, $addUrl = null) {
	  Service_Debug::setDebug();
	  if(empty($pageHead)) $pageHead = $this->pageHead;
	  if(empty($editUrl)) $editUrl = $this->editUrl;
	  if(empty($addUrl)) $addUrl = $this->addUrl;
	  echo '<div id=page_title><h1>';
	  	echo $pageHead;
	    if (!empty($editUrl)) echo ' (<a href="' . $editUrl . '">' . Service_Translate::getText('Редактировать') . '</a>)';
	    elseif(!empty($addUrl)) echo ' (<a href="' . $addUrl . '">' . Service_Translate::getText('Добавить') . '</a>)';
	  echo '</h1></div>';
	  if(!empty($this->pageDescription)) echo '<h3 class="col-2">' . $this->pageDescription . '</h3>';	  
  }
  
    /**
   * Метод выводит хлебные крошки
   *
   */
  public function showCrumbs() {
    Service_Debug::setDebug();
    $objViewBlock = new View_Block();
    $objViewBlock->showCrumbs($this->arrCrumbs, $this->ifLastCrumbIsLink);
  }

  /**
   * Выводит подвал
   *
   */
  public function showFooter() {
  	Service_Debug::setDebug();
  	echo '</div>'; // Закрываем div из header (mainWithLeft/mainWithRight/mainFullWidth)
  	echo '<div class="clear"></div>';
  	echo '</div>'; // Закрываем div box
  	echo '</div>';// Закрываем <div id="allIn">
  	echo '<div id="footerHeight"></div>';
  	echo '</div>'; // Закрываем <div id="all">	
    $this->showBasement();
  	$this->showClose();
  }

  /**
   * Выводит верхнюю часть
   *
   */
  public function showTop() {
    Service_Debug::setDebug();
    $objViewBlock = new View_Block();
    $objViewBlock->showTop();
   // $objViewBlock->showMainMenu(array());
  }

  /**
   * Выводит нижнюю часть
   *
   */
  public function showBasement() {
    Service_Debug::setDebug();
    $objViewBlock = new View_Block();
    $objViewBlock->showBasement();
  }
  
  public function showAnalytics() {
  	Service_Debug::setDebug();
  	?>
		<!-- Yandex.Metrika counter --><script type="text/javascript">(function (d, w, c) { (w[c] = w[c] || []).push(function() { try { w.yaCounter17816647 = new Ya.Metrika({id:17816647, enableAll: true, webvisor:true}); } catch(e) { } }); var n = d.getElementsByTagName("script")[0], s = d.createElement("script"), f = function () { n.parentNode.insertBefore(s, n); }; s.type = "text/javascript"; s.async = true; s.src = (d.location.protocol == "https:" ? "https:" : "http:") + "//mc.yandex.ru/metrika/watch.js"; if (w.opera == "[object Opera]") { d.addEventListener("DOMContentLoaded", f); } else { f(); } })(document, window, "yandex_metrika_callbacks");</script><noscript><div><img src="//mc.yandex.ru/watch/17816647" style="position:absolute; left:-9999px;" alt="" /></div></noscript><!-- /Yandex.Metrika counter -->
  	<script type="text/javascript">
		
		  var _gaq = _gaq || [];
		  _gaq.push(['_setAccount', 'UA-17785635-2']);
		  _gaq.push(['_trackPageview']);
		
		  (function() {
		    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
		  })();
		
		</script>
  <?php 
  }

  /**
   * Выводит левую часть
   *
   */
	public function showLeft() {
		$categoriesArray = Category::getList();
		$categoriesArray [] = array('url' => 'no_category', 'category_name' => 'Другие');
		echo '<div id="left">';
			echo '<ul>';
				foreach ($categoriesArray as $categoryArray) {
					echo '<li class="left-menu';
					if (stripos($_SERVER['REQUEST_URI'], '/' . $categoryArray['url'] . '/') !== false) echo ' active-left-menu-link';
					echo '">';
						echo '<a href ="' . W_ABSPATH . $categoryArray['url'] . '/articles">';
							echo '<div class="left-menu-picture"></div>';
						echo $categoryArray['category_name']  . '</a>';
					echo '</li>';
					
				}
				echo '</ul>';
		echo '</div>';
	}


  /**
   * Выводит правую часть
   *
   */
  public function showRight() {
  	Service_Debug::setDebug();
  	$objViewBlock = new View_Block();
  	echo '<div id="right">';
      //$objViewBlock->showSocialButtonsBlock();
      //$objViewBlock->showTopClientBanner();
      $objViewBlock->showGroupBookingBanner();
      //echo '<div class="theSimplestBorder alignCenter">' . Service_Translate::getText('По вопросам рекламы') . '</div>';
  	echo '</div>';
  }

	/**
	 * Метод создает сообщение об ошибке
	 *
	 */
	public function setError($error) {
		$this->error = $error;
	}

	/**
	 * Метод выводит сообщение об ошибке
	 *
	 */
	public function showError() {
		$objError = new Error();
		$objError->setFields(array('error_name' => 'Site error ' . $this->error, 'error_text' => $_SERVER['REQUEST_URI']));
		
		$objError->save();
		switch ($this->error) {
			case 404:
				header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
				$this->pageHead = $this->title = Service_Translate::getText('Такая страница не существует.');
				$objViewBlock = new View_Block();
				$objViewBlock->errorPage('404');
				exit();
				break;
			case 403:
				header($_SERVER["SERVER_PROTOCOL"]." 403 Forbidden");
				$objViewBlock = new View_Block();
				$objViewBlock->errorPage('403');
				exit();
				break;
			case 503:
				header($_SERVER["SERVER_PROTOCOL"]." 503 Service Unavailable");
				$this->pageHead = $this->title = Service_Translate::getText('Сервис временно недоступен.');
				break;
			default:
				$this->pageHead = $this->title = Service_Translate::getText('Произошла неизветная ошибка.');
				break;
		}
		$this->showRightColumn = false;
		$this->showLeftColumn = false;
		$this->showAnalytics = false;
		
    $this->showHeader();
		$this->showFooter();
	}


	/**
	 * Метод проверяет авторизацию пользователя и передает в js функцию
	 *
	 */
	public function addMetasForLogInCheck() {
		$objSession = User_Session::instance();
		$userId = $objSession->getUserId();
		if ($userId) $loggedIn = 1;
		else $loggedIn = 0;
		$this->addJsReady('user.logInCheck({"loggedIn": ' . $loggedIn . '});');
	}

  /**
   * Формирует url без GET параметров
   *
   * @return string
   */
  public function getCurrentUrl() {
    $urlBeforePageNummber = W_ABSPATH;
    //Формируем основной URL (то, что до символа "?")
    if (!empty($this->arrRequest)) {
      foreach ($this->arrRequest as $urlWord) {
        if (!empty($urlWord)) $urlBeforePageNummber .= $urlWord . '/';
      }
    }
    return $urlBeforePageNummber;
  }
  
	/**
	 * Метод выводит блок постраничного листания
	 */
	public function showPages() {
    $urlBeforePageNummber = W_ABSPATH;
    $urlAfterPageNummber = '';
    //Формируем основной URL (то, что до символа "?")
    if (!empty($this->arrRequest)) foreach ($this->arrRequest as $urlWord) {
    	if (!empty($urlWord)) $urlBeforePageNummber .= $urlWord . '/';
    }

    if (!$this->pageUrlsInGet) { //Если номер страницы нужно передавать не через "?", а через /123/
      $urlAfterPageNummber = '/';
      if (!empty($_SERVER['QUERY_STRING'])) {
        $urlAfterPageNummber .= '?' . $_SERVER['QUERY_STRING'];
      }
      if ($this->isPageInUrl) {
        $urlBeforePageNummber = substr($urlBeforePageNummber, 0, strlen($urlBeforePageNummber) - 1);
        $urlBeforePageNummber = substr($urlBeforePageNummber, 0, strrpos($urlBeforePageNummber, '/') + 1);
      }
    }
    else { // Если номер страницы нужно передавать в GET, через "?"
      $urlBeforePageNummber .= '?';
      if (strpos($_SERVER['QUERY_STRING'], 'p=') === 0) { // Если среди GET параметров в самом начале стоит p=
        $urlBeforePageNummber .= 'p=';
        if (strpos($_SERVER['QUERY_STRING'], '&', 2)) $urlAfterPageNummber = substr($_SERVER['QUERY_STRING'], strpos($_SERVER['QUERY_STRING'], '&', 2));
      }
      else { // Если в начале GET параметров не стоит p=
        $pagePosInGet = strpos($_SERVER['QUERY_STRING'], '&p=');
        if ($pagePosInGet === false) { // Если в GET параметрах вообще отсутствует "p="
          $urlBeforePageNummber .= 'p=';
          $urlAfterPageNummber = '&' . $_SERVER['QUERY_STRING'];
        }
        else { // Если в GET параметрах  "p=" стоит в середине или конце
          $urlBeforePageNummber .= substr($_SERVER['QUERY_STRING'], 0, $pagePosInGet + 3);
          if (strpos($_SERVER['QUERY_STRING'], '&', $pagePosInGet + 1)) $urlAfterPageNummber = substr($_SERVER['QUERY_STRING'], strpos($_SERVER['QUERY_STRING'], '&', $pagePosInGet + 1));
        }
      }
    }

    $pagesAmount = ceil($this->elementsInListAmount / $this->pageLimit);
    View_Pager::getPages($urlBeforePageNummber , $pagesAmount, $this->pageNum, '', $urlAfterPageNummber, $this->elementsInListAmount);
	}

  /**
   * Метод устанавливает текущий язык работы сайта
   * 
   * @param string $language - трехбуквенное сокращение языка
   */
  public function setLanguage($language) {
    $this->language = $language;
  }

  /**
   * Метод добавляет js и css файлы для работы редактора WYSIWYG
   *
   */
	public function addWysiwygMetas() {
    
		$this->addJsReady("
     
      elRTE.prototype.options.panels.web2pyPanel = [
	      'bold', 'italic', 'underline', 'forecolor', 'justifyleft', 'justifyright',
	      'justifycenter', 'justifyfull', 'formatblock', 'insertorderedlist', 'insertunorderedlist',
	      'link', 'image', 'flash'
	 	  ];
		  elRTE.prototype.options.toolbars.wysiwygAdmin = [
		    'save', 
		    'copypaste', 
		    'undoredo', 
		    'elfinder', 
		    'style', 
		    'alignment', 
		    'direction', 
		    'colors', 
		    'format', 
		    'indent', 
		    'lists', 
		    'links', 
		    'elements', 
		    'media', 
		    //'tables', 
		    'fullscreen'
	    ];
    
      var opts = {
        lang         : 'ru',   // set your language
        styleWithCSS : false,
        height       : 400,
        toolbar      : 'wysiwygAdmin',
 		fmOpen : function(callback) {
 					$('<div id=\"myelfinder\" />').elfinder({
 						url : W_AJAX + 'wysiwyg/connector/',
 						lang : 'ru',
 						dialog : { width : 900, modal : true, title : 'Files' }, // открываем в диалоговом окне
 						closeOnEditorCallback : true, // закрываем после выбора файла
 						editorCallback : callback // передаем callback файловому менеджеру
					})
        }
      };
      // create editor
      $('.wysiwygAdmin').elrte(opts);
    ");
		
		$this->arrCss[] = 'elrte.min.css';
		$this->arrCss[] = 'smoothness/jquery-ui-1.8.13.custom.css';
		
		$this->arrJs[] = 'jquery-ui-1.8.13.custom.min.js';
		$this->arrJs[] = 'elrte.min.js';
		$this->arrJs[] = 'i18n/elrte.ru.js';
		//$this->arrJs[] = 'elfinder.full.js';
		//$this->arrJs[] = 'elfinder_start.js';
  }

  /**
   * Добавляет мета-теги гуглокарт 
   */
	public function addGMapMetas($options) {
/* 		Service_Debug::setDebug();
		$this->addJs('plugins/g_maps.js');
		$this->addAdditional('<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=true"></script>');
		$this->addJsReady('initialize(' . $options . ');');
 */	}
	
	/**
	 * Добавляет мета-теги для работы автосаджеста
	 * 
	 */
	public function addAutosuggestMetas() {
		Service_Debug::setDebug();
	  $this->addJsReady("
  		options = { 
  			serviceUrl:'" . W_ABSPATH . "ajax/autosuggest/all/',
  			minChars:2,  
  			deferRequestBy: 400, 
  			onSelect: function(value, data){
  				arrData = data.split(',');
  				$('#essenceIdHidden').val(arrData[1]);
  				$('#essenceNameHidden').val(arrData[0]);
  				if (arrData[2] != undefined) $('#essenceUrlHidden').val(arrData[2]);
  				else $('#essenceUrlHidden').val('');
  				$('#city').dataset('old-value', $('#city').val());
				} 
			};
  		var city = $('#city').autocomplete(options);
  		//city.setOptions({ params: { 'action':''} });
  				
  	");	 
	}
	
	/**
	 * Добавляет JS для работы календаря
	 */
	public function addJsReadyForCalendar() {
  	Service_Debug::setDebug();  	
  	$dateArr = Service_Escape::requestDataStringRegExp('date_arr', '/^([0-2]\d|3[01])\/(0\d|1[012])\/(\d{4})$/', 'GET');
	  $dateDep = Service_Escape::requestDataStringRegExp('date_dep', '/^([0-2]\d|3[01])\/(0\d|1[012])\/(\d{4})$/', 'GET');
	  if (!$dateArr || !$dateDep) { 
	  	$dateArr = Service_Escape::requestDataStringRegExp('date_arr', '/^([0-2]\d|3[01])\/(0\d|1[012])\/(\d{4})$/', 'COOKIE');
		  $dateDep = Service_Escape::requestDataStringRegExp('date_dep', '/^([0-2]\d|3[01])\/(0\d|1[012])\/(\d{4})$/', 'COOKIE');
	  }
		if (!$dateArr || !$dateDep || Service_Date::changeDateFormat($dateArr, 'd/m/Y') < Service_Date::changeDateFormat(date('d/m/Y'), 'd/m/Y')) {
	  	$dateArr = date('d/m/Y');
	  	$dateDep = date('d/m/Y', time() + Service_Date::$timestampOneDayInterval);
	  }
	  if ($dateArr && $dateDep) {	  
		  $this->addJsReady("
				calendar.startDate = '" . $dateArr . "';
				calendar.endDate = '" . $dateDep . "';
				calendar.start = " . Service_Date::changeDateFormat($dateArr, 'd/m/Y') . "000;
				calendar.end = " . Service_Date::changeDateFormat($dateDep, 'd/m/Y') . "000;
				$('#calendar').daterange('calendarText', 'date_arr', 'date_dep');	  			
				$('#calendarIco').click(function(){
					$('#calendarText').focus();
					return !1;
	  		});	  			
			");
	  }    	
  }	
}
?>
